#ifndef CLIENT_H
#define CLIENT_H

#include <Qt>
#include <QString>
#include <QList>
#include <QDate>
#include "adresse.h"
#include "listecontact.h"
#include "listedatecontact.h"
#include "dateobtenu.h"
#include "objtosql.h"


class Client : public objToSQL
{
public:

    Client();
    Client(QString nomLieu, QString typeClient);
    Client(QString nomLieu, QString typeClient, Adresse adresse, Contact contact);
    Client(QSqlQuery query);

    static const QString NomChampNomLieu;
    static const QString NomChampTypeClient;
    static const QString NomChampDateProgrammation;
    static const QString NomChampCommentaires;
    static const QString NomChampDistance;

    void setNomLieu(QString nomLieu);
    void setTypeClient(QString typeClient);
    void setAdresse(Adresse adresse);
    void setListeContact(ListeContact listeContact);
    void setDateProgrammation(QDate dateProgrammation);
    void setCommentaire(QString commentaire);
    void addCommentaire(QString commentaire);
    void setRemarques(QString remarques);
    void setListDateContact(ListeDateContact listDateContact);
    void setListDateObtenu(QList<DateObtenu> listDateObtenu);
    void setDistance(int distance);

    void addContact(Contact contact);
    void addListeContact(ListeContact liste);
    void addDateContact(DateContact dateContact);
    void addListeDateContact(ListeDateContact liste);
    void addDateObtenu(DateObtenu dateObtenu);
    void addListeDateObtenu(QList<DateObtenu> liste);

    void replaceContact(int index, Contact contact);
    void replaceDateContact(int index, DateContact contact);

    void removeContact(Contact contact);
    void removeContact(int index);
    void removeDateContact(DateContact dateContact);
    void removeDateContact(int index);
    void removeDateObtenu(DateObtenu dateObtenu);
    void removeDateObtenu(int index);

    void setContactId(int index, int id);
    void setDateContactId(int index, int id);
    void setDateObtenuId(int index, int id);

    void ValideDateContact(int index);

    QString getNomLieu()const;
    QString getTypeClient()const;
    Adresse getAdresse()const;
    ListeContact getListeContact()const;
    QDate getDateProgrammation()const;
    QString getCommentaire()const;
    QString getRemarques()const;
    ListeDateContact getListDateContact()const;
    QList<DateObtenu> getListDateObtenu()const;
    void BindValues(QSqlQuery &query, QStringList champs);
    int getDistance()const;

    bool operator ==(Client const& client);

    static QStringList ListeChampSQL();
    static QStringList ListeTypeDataSQL();

    QStringList SQLWhere()const;
    QString SetQuery()const;
    QStringList SetBindValues()const;

    bool Compare(Client *client);
    bool ContainsChar(QString filtre);

    QString FirstUpperThenLower(QString s);

private:
    QString m_nomLieu;
    QString m_typeClient;
    Adresse m_adresse;
    ListeContact m_listeContact;
    QDate m_dateProgrammation;
    QString m_commentaire;
    QString m_remarques;
    ListeDateContact m_listDateContact;
    QList<DateObtenu> m_listDateObtenu;
    int m_distance;

};

#endif // CLIENT_H
